package com.soul.base.juc.level05;

import java.util.Vector;
import java.util.concurrent.TimeUnit;

/**
 * 有N张火车票，每张票都有一个编号
 * 同时有10个窗口对外售票
 * 请写一个模拟程序
 *
 * 分析下面的程序可能会产生哪些问题？
 *
 * 使用Vector或者Collections.synchronizedXXX
 * 分析一下，这样能解决问题吗？
 * 问题:1.容器本身非同步 2.判断和移除逻辑需要同步(这两个操作需要保证原子性)
 * 只处理了问题1
 */
public class T18_TicketSeller2 {
	static Vector<String> tickets = new Vector<>();


	static {
		for(int i=0; i<1000; i++) tickets.add("票 编号：" + i);
	}

	public static void main(String[] args) {

		for(int i=0; i<10; i++) {
			new Thread(()->{
				//两个业务处理需要保证原子
				while(tickets.size() > 0) {

					try {
						TimeUnit.MILLISECONDS.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}


					System.out.println("销售了--" + tickets.remove(0));
				}
			}).start();
		}
	}
}
